package practice1;

/**
 *9.回文数
 * @author Tara
 * @implNote 给你一个整数 x ，如果 x 是一个回文整数，返回 true ；否则，返回 false 。
 *
 * 回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数。例如，121 是回文，而 123 不是。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/palindrome-number
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Pra1 {


    public static void main(String[] args) {


        long begintime = System.currentTimeMillis();
        boolean b=false;
        for (int i = 0; i < 10000; i++) {
            b = solution_1(1234554321+i);
            //b = solution_2(1234554321);
        }
        System.out.println("耗时：" + (System.currentTimeMillis() - begintime)+" ms");
        System.out.println(b);
    }

    /**
     * 自己写的
     * @param input 输入的数字
     * @return  true==是回文； false==不是回文
     */
    private static boolean solution_1(int input){
        //排除特殊情况
        if (input<0){
            return false;
        }
        //排除特殊情况
        if (input==0){
            return true;
        }

        //转成字符串
        String s = String.valueOf(input);
        //获取输入数字的位数
        int bitLength = s.length();
        //获取中位数
        int midNum = bitLength/2+1;
        //将当前数字按位切割，装机数组,数组长度为最大位数长度；
        String[] arr = new String[bitLength];
        for (int i = 0; i < arr.length; i++) {
            arr[i]= String.valueOf(s.charAt(i));
        }
        //输出打印一下切割的数组；
        //System.out.println(Arrays.toString(arr));
        boolean flag = false;
        for (int j = 0; j < midNum; j++) {
            if (j!=midNum && arr[j].equals(arr[bitLength-j-1])){
                flag = true;
            }else {
                return false;
            }
        }
        return flag;
    }

    /**
     * 参考推荐，执行效率高很多
     * @param x 输入的数字
     * @return  true==是回文； false==不是回文
     */
    private static boolean solution_2(int x){
        if (x == 0) {
            return true;
        }
        //x<0或者取模最后一位是0
        if (x < 0 || x % 10 == 0) {
            return false;
        }
        int reversed = 0;
        while (x > reversed) {
            reversed = reversed * 10 + x % 10;
            x /= 10;
        }
        //偶数情况，奇数情况
        return x == reversed || x == reversed / 10;
    }
}
